package com.ruoyi.web.controller.tool;

import com.ruoyi.framework.responseBodyJson.JSON;
import com.ruoyi.web.controller.yf.YfReportsConfigController;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Map;

/**
 * @author XiaoYi...
 * 通过反射修改注参数
 * @date 2020/5/20 17:42
 * @return
 */
public class Test {


    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        YfReportsConfigController bar = new YfReportsConfigController();
        //获取Bar实例
        //获取Bar的val字段
        Field field = YfReportsConfigController.class.getDeclaredField("include");
        //获取val字段上的Foo注解实例
        JSON foo = field.getAnnotation(JSON.class);
        //获取 foo 这个代理实例所持有的 InvocationHandler
        InvocationHandler h = Proxy.getInvocationHandler(foo);
        // 获取 AnnotationInvocationHandler 的 memberValues 字段
        Field hField = h.getClass().getDeclaredField("memberValues");
        // 因为这个字段事 private final 修饰，所以要打开权限
        hField.setAccessible(true);
        // 获取 memberValues
        Map memberValues = (Map) hField.get(h);
        // 修改 value 属性值
        memberValues.put("include", "weight");
        // 获取 foo 的 value 属性值
        String value = foo.include();
        System.out.println(value); // ddd
    }
}
